<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        var out = 25
        var inner = {
            out: 20,
            func: function () {
                var out = 30
                return this.out
            }
        };
        console.log((inner.func, inner.func)())
        console.log(inner.func())
        console.log((inner.func)())
        console.log((inner.func = inner.func)())
        //----------
        let {a,b,c} = { c:3, b:2, a:1 }
        console.log(a, b, c) //1 2 3
        //--------
        console.log(Object.assign([1, 2, 3], [4, 5]))//[4,5,3]
        //-------------
        var x=1
        switch(x++)
        {
            case 0: ++x
            case 1: ++x
            case 2: ++x
        }
        console.log(x) //4
        //------------
        // console.log(typeof undefined == typeof NULL)   //typeof NULL的值为'undefined'
        // console.log(typeof function () {} == typeof class {}) //typeof class {}的值为'function'
        // //----------
        // var count = 0
        // console.log(typeof count === "number")
        //     //执行顺序：typeof count > !!typeof count > true==="number"
        // console.log(!!typeof count === "number")
        //------
        // var i = 1
        // function b() {
        //     console.log(i)
        // }
        // function a() {
        //     var i = 2
        //     b()
        // }
        // a()
        // //--------
        // var obj = {
        //     name: 'abc',
        //     fn: () => {
        //         console.log(this.name)
        //     }
        // };
        // obj.name = 'bcd'
        // obj.fn()
        // //--------------
        // const obj = {
        //     a: {
        //         a: 1
        //     }
        // };
        // const obj1 = {
        //     a: {
        //         b: 1
        //     }
        // };
        // console.log(Object.assign(obj, obj1))
        // //------------
        // console.log(a)
        // var a = 1
        // var getNum = function() {
        //     a = 2
        // }
        // function getNum() {
        //     a = 3
        // }
        // console.log(a)
        // getNum()
        // console.log(a)
        // //-------
        // var scope = 'global scope'
        // function a(){
        //     function b(){ 
        //         console.log(scope)
        //     }
        //     return b
        //     var scope = 'local scope'
        // }
        // a()()//undefined
        // //----------
        // var a = 1
        // function a(){}
        // console.log(a)

        // var b
        // function b(){}
        // console.log(b)

        // function b(){}
        // var b
        // console.log(b)
        // //---------------
        // const person = {
        //     address: {
        //         country:"china",
        //         city:"hangzhou"
        //     },
        //     say: function () {
        //         console.log(`it's ${this.name}, from ${this.address.country}`)
        //     },
        //     setCountry:function (country) {
        //         this.address.country=country
        //     }
        // }

        // const p1 = Object.create(person)
        // const p2 = Object.create(person)

        // p1.name = "Matthew"
        // p1.setCountry("American")

        // p2.name = "Bob"
        // p2.setCountry("England")

        // p1.say()
        // p2.say()
        // //--------
        // setTimeout(function() {
        //     console.log(1)
        // }, 0)
        // new Promise(function(resolve) {
        //     console.log(2)
        //     for( var i=0 ; i<10000 ; i++ ) {
        //         i == 9999 && resolve()
        //     }
        //     console.log(3)
        // }).then(function() {
        //     console.log(4)
        // })
        // console.log(5)
        //-----
    </script>
</head>
<body>
    <div style="color:red">逗号操作符会返回表达式中的最后一个值</div>
    <div style="color:blue">数组解构赋值是按位置对应的，而对象只要变量与属性同名，顺序随意</div>
    <div>如果变量和函数同名，变量的提升会被忽略</div>
    <div>
       函数提升的优先级高于变量提升 
       <span style="color:red">且不会被同名变量声明时覆盖，但是会被同名变量赋值后覆盖</span>
    </div>
    <div>
        js在解析代码时会将同步任务放入<span style="color:red">执行栈</span>中，按顺序执行，当遇到异步任务时，
        会交给其他的线程来处理，当执行栈中的同步代码执行完后，从任务队列中取出已完成异步任务的回调来执行
        如此循环
    </div>
    
    
</body>
</html>
